// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/process/process_iterator.h"

namespace base {

ProcessIterator::ProcessIterator(const ProcessFilter* filter)
    : started_iteration_(false)
    , filter_(filter)
{
    snapshot_ = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
}

ProcessIterator::~ProcessIterator()
{
    CloseHandle(snapshot_);
}

bool ProcessIterator::CheckForNextProcess()
{
    InitProcessEntry(&entry_);

    if (!started_iteration_) {
        started_iteration_ = true;
        return !!Process32First(snapshot_, &entry_);
    }

    return !!Process32Next(snapshot_, &entry_);
}

void ProcessIterator::InitProcessEntry(ProcessEntry* entry)
{
    memset(entry, 0, sizeof(*entry));
    entry->dwSize = sizeof(*entry);
}

bool NamedProcessIterator::IncludeEntry()
{
    // Case insensitive.
    return _wcsicmp(executable_name_.c_str(), entry().exe_file()) == 0 && ProcessIterator::IncludeEntry();
}

} // namespace base
